home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Misc / Wood.0.72 / Sources / AttributesInspector.m < prev    next >
Encoding:
Text File  |  1994-06-21  |  4.2 KB  |  225 lines

  1.  
  2. #import "AttributesInspector.h"
  3. #import "Tree.h"
  4.  
  5. @implementation AttributesInspector
  6.  
  7. - init
  8. {  
  9.        [super init];
  10.     view = nil;    
  11.     return self;
  12. }
  13.    
  14. - (BOOL)wantsButtons 
  15.     return NO; 
  16. }
  17.  
  18. - (BOOL)doesHandleSelection
  19. {
  20.     char buf[MAXPATHLEN + 1];
  21.     id bundle;
  22.     
  23.     if([self selectionCount] == 1 && [[self selection] isMemberOf:[Tree class]]){
  24.         if(!view){
  25.              bundle = [NXBundle mainBundle];
  26.             [bundle getPath:buf forResource:"AttributesInspector" ofType:"nib"];
  27.                [NXApp loadNibFile:buf owner:self withNames:NO fromZone:[self zone]];
  28.         }
  29.         return YES;
  30.     }
  31.     return NO;
  32. }
  33.  
  34. - ok:sender
  35. {
  36.     return [super ok:sender];
  37. }
  38.  
  39. - revert:sender
  40. {
  41.     [super revert:sender];
  42.     [clearAttachment setEnabled:[[self selection] attached]];
  43.     [clearSound setEnabled:[[self selection] hasSound]];
  44.     [soundView setSound:[[self selection] attachedSound]];
  45.     return self;
  46. }
  47.   
  48. - changeAttachment:sender
  49. {
  50.     const char *localDirectory;
  51.     const char *const *localFiles;
  52.     char buffer[MAXPATHLEN];
  53.     id openpanel = [OpenPanel new];
  54.     const char *const *fileTypes = {NULL};
  55.     
  56.     if([openpanel runModalForTypes:fileTypes]){
  57.         localDirectory = [openpanel directory];
  58.         localFiles = [openpanel filenames];
  59.         strcpy(buffer,localDirectory);
  60.         strcat(buffer,"/");
  61.         strcat(buffer,*localFiles);
  62.         [clearAttachment setEnabled:YES];
  63.         [[self selection] attachFile:buffer];
  64.     }
  65.     return self;
  66. }
  67.  
  68. - clearAttachment:sender
  69. {
  70.     [[self selection] breakAttachment];
  71.     [clearAttachment setEnabled:NO];
  72.     return self;
  73. }
  74.  
  75. - changeSound:sender
  76. {
  77.     const char *localDirectory;
  78.     const char *const *localFiles;
  79.     char buffer[MAXPATHLEN];
  80.     id openpanel = [OpenPanel new];
  81.     const char *const fileTypes[2] = {"snd",NULL};
  82.     
  83.     if([openpanel runModalForTypes:fileTypes]){
  84.         localDirectory = [openpanel directory];
  85.         localFiles = [openpanel filenames];
  86.         strcpy(buffer,localDirectory);
  87.         strcat(buffer,"/");
  88.         strcat(buffer,*localFiles);
  89.         [clearSound setEnabled:YES];
  90.         [[self selection] attachSound:buffer];
  91.         [soundView setSound:[[self selection] attachedSound]];
  92.     }
  93.     return self;
  94. }
  95.  
  96. - clearSound:sender
  97. {
  98.     [[self selection] breakSound];
  99.     [clearSound setEnabled:NO];
  100.     return self;
  101. }
  102.  
  103. - erase:sender
  104. {    
  105.     return self;
  106. }
  107.  
  108. - pause:sender
  109. {
  110.     if([pauseButton state]){
  111.         [playButton setEnabled:NO];
  112.         [recordButton setEnabled:NO];
  113.         [stopButton setEnabled:NO];
  114.         [soundView pause:self];
  115.     } else {
  116.         [playButton setEnabled:YES];
  117.         [recordButton setEnabled:YES];
  118.         [stopButton setEnabled:YES];
  119.         [soundView resume:self];
  120.     }
  121.     return self;
  122. }
  123.  
  124. - play:sender
  125. {
  126.     [playButton setEnabled:NO];
  127.     [recordButton setEnabled:NO];
  128.     [stopButton setEnabled:YES];
  129.     [pauseButton setState:0];
  130.     [soundView play:self];
  131.     return self;
  132. }
  133.  
  134. - record:sender
  135. {    
  136.     [recordButton setEnabled:NO];
  137.     [playButton setEnabled:NO];
  138.     [stopButton setEnabled:YES];
  139.     [soundView record:self];
  140.     return self;
  141. }
  142.  
  143. - stop:sender
  144. {
  145.     [soundView stop:self];
  146.     return self;
  147. }
  148.  
  149. - scale:sender
  150. {
  151.     [soundView setReductionFactor:[sender floatValue]];
  152.     return self;
  153. }
  154.  
  155. // SoundView delegate methods
  156.  
  157. - didPlay:sender
  158. {
  159.     [soundMeter stop:self];
  160.     [playButton setState:0];
  161.     [playButton setEnabled:YES];
  162.     [recordButton setState:0];
  163.     [recordButton setEnabled:YES];
  164.     [pauseButton setState:0];
  165.     return self;
  166. }
  167.  
  168. - willPlay:sender
  169. {
  170.     [soundMeter setSound:[sender soundBeingProcessed]];
  171.     [soundMeter run:self];
  172.     return self;
  173. }
  174.  
  175. - willRecord:sender
  176. {
  177.     [soundMeter setSound:[sender soundBeingProcessed]];
  178.     [soundMeter run:self];
  179.     return self;
  180. }
  181.  
  182. - didRecord:sender
  183. {
  184.     [soundMeter stop:self];
  185.     [playButton setState:0];
  186.     [playButton setEnabled:YES];
  187.     [recordButton setState:0];
  188.     [recordButton setEnabled:YES];
  189.     [pauseButton setState:0];
  190.     if(![[self selection] hasSound]){
  191.         [[self selection] setSound:[soundView sound]];
  192.         [clearSound setEnabled:YES];
  193.     }
  194.     return self;
  195. }
  196.  
  197. - soundDidChange:sender
  198. {
  199.     if(![[self selection] hasSound]){
  200.         [[self selection] setSound:[soundView sound]];
  201.         [clearSound setEnabled:YES];
  202.     }
  203.     return self;
  204. }
  205.  
  206. - hadError:sender
  207. {
  208.     int err = [[sender soundBeingProcessed] processingError];
  209.  
  210.     if([playButton state])
  211.     NXRunAlertPanel("Play error",
  212.         SNDSoundError(err),
  213.         "OK",
  214.         NULL,NULL);
  215.     else if([recordButton state])
  216.     NXRunAlertPanel("Record error",
  217.         SNDSoundError(err),
  218.         "OK",
  219.         NULL,NULL);
  220.     return [self stop:self];
  221. }
  222.  
  223. @end
  224.